@Lemon
3年前 提问
3个回答

什么是 Windows 挂钩技术

安全侠
3年前

MinWinHooks
涅磐挂钩
CFG挂钩
AVRF挂钩
Shim挂钩

Ann
3年前

Windows 10更改
因此,我们将专门研究Windows 10中的新变化
新的数据结构和类型
新的版本号
新的API参数/导出/技术
语义/功能更改

齐士忠
3年前
官方采纳

Windows 挂钩技术

钩子(Hook)技术是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

钩子(Hook)也是在等待捕获系统中的某个消息或者动作。钩子的应用范围非常广泛,比如输入监控、API拦截、消息捕获、改变程序执行流程等方面。杀毒软件会用Hook技术钩住一些API函数,比如钩住注册表读写函数,从而防止病毒对注册表进行写入;病毒使用Hook技术有针对性的捕获键盘的输入,从而记录用户的密码等敏感信息;文件加密系统通过Hook技术在不改变用户操作的情况下对用户的文件进行透明加密,这些都属于Hook范畴的知识。

在windows系统下,Hook技术的方法比较多,使用比较灵活,常见的Hook方法有Inline Hook,IAT Hook,Windows钩子……Hook技术涉及DLL相关的知识。Hook技术也涉及注入的知识,想要把完成Hook功能的DLL文件加载到目标进程空间中,就要使用注入的知识。

Hook原理

Hook技术无论对安全软件还是恶意软件都是十分关键的一项技术,其本质就是劫持函数调用。但是由于处于Linux用户态,每个进程都有自己独立的进程空间,所以必须先注入到所要Hook的进程空间,修改其内存中的进程代码,替换其过程表的符号地址。在Android中一般是通过ptrace函数附加进程,然后向远程进程注入so库,从而达到监控以及远程进程关键函数挂钩。

Hook技术的难点,并不在于Hook技术,初学者借助于资料“照葫芦画瓢”能够很容易就掌握Hook的基本使用方法。如何找到函数的入口点、替换函数,这就涉及了理解函数的连接与加载机制。

从Android的开发来说,Android系统本身就提供给了我们两种开发模式,基于Android SDK的Java语言开发,基于AndroidNDK的Native C/C++语言开发。所以,我们在讨论Hook的时候就必须在两个层面上来讨论。

对于Native层来说Hook的难点其实是在理解ELF文件与学习ELF文件上,特别是对ELF文件不太了解的读者来说;对于Java层来说,Hook就需要了解虚拟机的特性与Java上反射的使用。